/*[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[
 *
 *	@file		touchpanel_system.h
 *	@brief		タッチパネルシステムのヘッダ
 *	@author		tomoya takahashi
 *	@data		2004.12.03
 *				2006.02.14	30フレーム使用に変更
 *
 ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]*/


#ifndef __TOUCHPANEL_SYSTEM_H__
#define	__TOUCHPANEL_SYSTEM_H__

#undef	GLOBAL
#ifdef	__TOUCHPANEL_SYSTEM_H_GLOBAL
#define	GLOBAL	/* */
#else
#define	GLOBAL	extern
#endif


/*-----------------------------------------------------------------------------
 *					定数宣言
 ----------------------------------------------------------------------------*/
#define TP_REQUEST_CHECK_MAX		5		// 命令を出して失敗したらエラーを返す回数

#define		TP_ONE_SYNC_BUFF (9)			// １シンクにサンプリングできる最大の数を
											// サンプリングするのに必要なバッファサイズ

#define		TP_ONE_SYNC_DATAMAX	(8)			// １シンクに取得できるデータ最大数



//-------------------------------------
/// エラーの列挙
enum
{
	TP_END_BUFF = 0xffffffff,	// サンプリング用バッファが一杯
	TP_ERR = 0,					// ARM7転送以外のエラー
	TP_OK,						// Touchパネル関数のOK
	TP_FIFO_ERR,				// ARM7のFIFO命令転送エラー
	TP_SAMP_NOT_START			// サンプリング開始されていません
};

//-------------------------------------
/// サンプリング種別列挙
enum{
	TP_SAMP_NONE,			// サンプリングしていない
	TP_BUFFERING,			// バッファ格納モード
	TP_NO_BUFF,				// 格納処理なしモード
	TP_NO_LOOP,				// バッファをループさせない
	TP_BUFFERING_JUST,		// そのままバッファリングする(離していてもバッファリング)
	TP_NO_LOOP_JUST,		// そのままバッファリングする(離していてもバッファリング)
							// ループさせない
};
// 今のバージョンではTP_BUFFERING_JUST,	TP_NO_LOOP_JUSTを使用したデータで内外判定はできない


//-------------------------------------
/// 絵のデータ作成フラグ
enum{
	TP_MAKE_PICT_NORMAL,		// 囲まれたエリアがいくつあってもよい
	TP_MAKE_PICT_ONE_FAST,		// 余計な部分をなくす
								// 一番最初にあった交点が作っている
								// 図形のデータを作成

	TP_MAKE_PICT_ONE_END		// 両線分の先から見て一番最後にあった交点
								// が作っている図形のデータを作成
								// このフラグをセットすると必ず図形は１つになる
};

/*-----------------------------------------------------------------------------
 *					構造体宣言
 ----------------------------------------------------------------------------*/
//-------------------------------------
/// タッチパネルの内外判定用図形データ構造体
typedef struct
{
	u32	Size;					// TP_VECTOR_DATAの配列の要素数
	Vec2DS32*	pPointData;		// 頂点データの配列
} TP_PICTURE_DATA;

//-------------------------------------
/// １フレームのタッチ情報格納構造体
typedef struct
{
	u16		Size;			// このフレームの有効サンプリング数
	TPData	TPDataTbl[ TP_ONE_SYNC_DATAMAX ];	// このフレームのサンプリングデータ
} TP_ONE_DATA;


/*-----------------------------------------------------------------------------
 *					プロトタイプ宣言
 ----------------------------------------------------------------------------*/

//----------------------------------------------------------------------------
/**
 *
 *@brief	タッチパネルのワーク初期化
 *@param	none
 *@return	none
 *
 */
//-----------------------------------------------------------------------------
GLOBAL void BootTPSystem( void );

//----------------------------------------------------------------------------
/**
 *
 *@brief	タッチパネルを使用する準備を行います
 *
 *@param	none
 *
 *@return	none
 */
//-----------------------------------------------------------------------------
GLOBAL void InitTPSystem( void );

//----------------------------------------------------------------------------
/**
 *@brief	タッチパネルのサンプリング開始
 *
 *@param	p_buff：サンプリングデータを入れるバッファ
 *@param	size：バッファのサイズ
 *@param	sync：１フレームに何回サンプリングするのか(MAX4)
 *
 *@retval	TP_OK：成功
 *@retval　	TP_FIFO_ERR：転送失敗
 *@retval	TP_ERR：転送以外の失敗
 */
//-----------------------------------------------------------------------------
GLOBAL u32 InitTP( TPData* p_buff, u32 size, u32 sync );

//----------------------------------------------------------------------------
/**
 *@brief	タッチパネルのサンプリング開始	バッファリングなし
 *
 *@param	sync：１フレームに何回サンプリングするのか(MAX4)
 *
 *@retval	TP_OK：成功
 *@retval　	TP_FIFO_ERR：転送失敗
 *@retval	TP_ERR：転送以外の失敗
 */
//-----------------------------------------------------------------------------
GLOBAL u32 InitTPNoBuff( u32 sync );

//----------------------------------------------------------------------------
/**
 *
 *@brief	サンプリング情報を管理し、今の状態を返す
 *
 *@param	pData：このフレームの情報(initで指定したサンプリング回数分の情報)
 *@param	type：サンプリング種別の番号
 *@param	comp_num：バッファに格納するときに、comp_num位のさがあったら格納する(圧縮モード時のみ)
 *
 *@return	u32：サンプリング種別による変化
					type：TP_BUFFERING		サンプリングされたバッファサイズ
					type：TP_NO_LOOP		サンプリングされたバッファサイズ
											バッファが一杯になったとき TP_END_BUFF
					type：TP_NO_BUFF		TP_OK

					type：TP_SAMP_NOT_START	サンプリング開始されていません
 */
//-----------------------------------------------------------------------------
GLOBAL u32 MainTP( TP_ONE_DATA* pData, u32 type, u32 comp_num );

//----------------------------------------------------------------------------
/**
 *
 *@brief	サンプリングを終了する
 *
 *@param	none
 *
 *@retval	TP_OK：成功
 *@retval　	TP_FIFO_ERR：転送失敗
 *@retval	TP_ERR：転送以外の失敗
 */
//-----------------------------------------------------------------------------
GLOBAL u32 StopTP( void );


//----------------------------------------------------------------------------
/**
 *	@brief	スリープ処理前の停止　復帰処理
 */
//-----------------------------------------------------------------------------
GLOBAL void ReStartTP_Sleep( void );
GLOBAL void StopTP_Sleep( void );



// 生の座標を画面座標に変える関数（MainTPを使用しているときは使う必要はありません）
GLOBAL TPData ChangeTPData( TPData* pData );					// キャリブレーション値を使用
																// して座標を画面座標にしたTPDataを取得
GLOBAL void ChangeTPDataBuff( TPData* pData, u32 size );		// キャリブレーション値を使用
																// して座標を画面座標にしたTPDataを取得

/// タッチパネル情報を渡してその絵の情報を使い内外判定などを行うシステム
// 絵の情報を作成
GLOBAL TP_PICTURE_DATA* MakeTPPictureData( u32 type, TPData* pBuff, u32 size, u16 check_num, u32 dist, BOOL* p_cross, int heap );
// 内外チェックをする
GLOBAL u32 CheckTPPictureInOut( TP_PICTURE_DATA* pData, u16 x, u16 y );
// 絵の情報を破棄
GLOBAL void DestTPPictureData( TP_PICTURE_DATA* pPictData );

/*-----------------------------------------------------------------------------
 *					グローバル変数宣言
 ----------------------------------------------------------------------------*/
#undef	GLOBAL
#endif		//__TOUCHPANEL_SYSTEM_H__
